package com.Reporte_Venta;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.concurrent.ExecutionException;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.BarChart.Type;
import org.achartengine.model.SeriesSelection;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.R.string;
import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.ClasesGraficas.VentasN2;
import com.ClasesGraficas.VentasN2v2;
import com.Generales.login;
import com.Reporte_Evolutivo.RE_1_Tipo_Eventos;
import com.Generales.R;
import com.JSON.JSONParser_Final;

public class Venta_Genero extends Activity 
{
		/*** JASON ***/
		private static String urlVentasAnuales = "http://200.16.7.112:3000/reports_management/report/ventasAnualesGenero";
		private static String urlVentasMensuales = "http://200.16.7.112:3000/reports_management/report/ventasMensualesGenero";
		private static String urlVentasTrimestrales = "http://200.16.7.112:3000/reports_management/report/ventasTrimestralesGenero";
		private JSONArray auxJson = null;
		
		/*** GRAFICA ***/
		GraphicalView mChartView = null;
		LinearLayout layoutGrafica = null;
		String tituloGrafica = "";
		List<String> titulosX = null;
		List<double[]> ventas = null;
		List<Venta> regVenta = null;
		
		/*** TERCER NIVEL ***/
		private Intent intGeneroN3 = null; //Se inicializar en la funcion inicializaFlag
		private String [] generos;
		private String periodo;
		private String genero;
		
		/*** INTENTS NIVELES ***/
		private Intent intVentasGenerales = null; //Se inicializar en la funcion inicializaFlag
		private Intent intTipoEvento = null; //Se inicializar en la funcion inicializaFlag
		private Intent intEdad = null; //Se inicializar en la funcion inicializaFlag
		private Intent intCanal = null; //Se inicializar en la funcion inicializaFlag
		private Intent intPromotor = null; //Se inicializar en la funcion inicializaFlag
		private Intent intDistrito = null; //Se inicializar en la funcion inicializaFlag
		private AlertDialog.Builder tipoNivel = null; //Se inicializa al seleccionar la grafica para generar el otro nivel
		
		
		/*** CONSTANTES DE ACTIVITY *****/
		private static final int GENERO_N2 = 1;
		private static final int GENERO_N3 = 2;
		private static final int VENTAS_GENERALES = 3;
		private static final int TIPO_EVENTO = 4;
		private static final int EDAD = 5;
		private static final int CANAL = 6;
		private static final int PROMOTOR = 7;
		private static final int DISTRITO = 8;
		
		/*** FALGS o PARAMETROS ***/
		public int flagGenerarReporte = 0;
		public int flagTiempo = 0; // 1=mes && 2=trimenstre && 3=anno
		public int flagLima = 0;
		public int flagProvincia = 0;
		public int flagNivel=0; 
		
		private Button pickDateInicio;
	    private int anhoInicio;
	    private int mesInicio;
	    private int diaInicio;
	    
	    private Button pickDateFin;
	    private int anhoFin;
	    private int mesFin;
	    private int diaFin;
	    
	    private TextView fechaInicio;
	    private TextView fechaFin;
	    private View view;
	    
	    static final int DATE_DIALOG_Inicial = 0;
	    static final int DATE_DIALOG_Final = 1;
	    
	    private String idUsuario;
	    private String nombreUser;
	    private int idperfil;


		@Override
		protected void onCreate(Bundle savedInstanceState)
		{
			super.onCreate(savedInstanceState);
			setContentView(R.layout.ventas);
			
			this.inicializaFlagPromotor();
			
			nombreUser = this.getIntent().getExtras().getString("nombreUser");
			idUsuario = this.getIntent().getExtras().getString("idUsuario");
			idperfil = this.getIntent().getExtras().getInt("idperfil");
			
			/*** ACTION BAR ***/
			Resources res = getResources();
			Drawable myImage = res.getDrawable(R.drawable.background2);		
			ActionBar actionBar = this.getActionBar();
			actionBar.setBackgroundDrawable(myImage);
			actionBar.setDisplayUseLogoEnabled(true);
			actionBar.setDisplayShowTitleEnabled(true);
			actionBar.setTitle(nombreUser);
			
			/*** DISENO DE LA PANTALLA ***/
			setColorTiempo();
			setColorUbicacion();
			
			this.incializaFecha();
			
			
			
			GenerarReporte(view);
		}
		
		
		
		public void GenerarReporte(View view)
		{
			int numeroInicial = anhoInicio*10000+mesInicio*100+diaInicio;
			int numeroFinal = anhoFin*10000+mesFin*100+diaFin;
			
			if (( ( flagProvincia == 0 && flagLima==0) || flagTiempo == 0)== false) 
			{
				if(numeroFinal>=numeroInicial)
				{
						if (flagNivel==0)
						{
							this.incializaFlags(VENTAS_GENERALES);
							Toast.makeText(this, "Se genera el reporte por Ventas Generales	", Toast.LENGTH_LONG).show();
						    startActivity(intVentasGenerales);
						}
						if (flagNivel==1)
						{
							this.incializaFlags(PROMOTOR);
							Toast.makeText(this, "Se genera el reporte por Promotor", Toast.LENGTH_LONG).show();
							startActivity(intPromotor);
							
						}
						if (flagNivel==2)
						{
							this.incializaFlags(TIPO_EVENTO);
							Toast.makeText(this, "Se genera el reporte por Tipo de Evento", Toast.LENGTH_LONG).show();
							startActivity(intTipoEvento);
						}
						if (flagNivel==3)
						{
							this.incializaFlags(EDAD);
							Toast.makeText(this, "Se genera el reporte por Edad", Toast.LENGTH_LONG).show();
						    startActivity(intEdad);
						}
						if (flagNivel==4)
						{
							this.incializaFlags(CANAL);
							Toast.makeText(this, "Se genera el reporte por Canal", Toast.LENGTH_LONG).show();
						    startActivity(intCanal);
						}
						if (flagNivel==5)
						{
							int flagTipoReporte = 3; //ANOS
							String ubicacion = "";
							if (flagLima == 1 && flagProvincia != 1)
								ubicacion = "lima";
							if (flagLima != 1 && flagProvincia == 1)
								ubicacion = "provincias";
							
							VentasN2v2 ventasGenero = new VentasN2v2();
							
							if (flagTiempo == 3) //ANUAL
							{
								String url = urlVentasAnuales;
								if (ubicacion.equals(""))
									url += "Ambos/";
								else
									url += "/";
								url += anhoInicio + "/" + anhoFin;
								if (ubicacion.equals(""))
									url +=  ".json";
								else
									url += "/" + ubicacion + ".json";
								auxJson = returnJnConsultas(url);
								
								if (auxJson != null)
								{
									if (auxJson.length() != 0)
									{
										leerJsonA();
										if (anhoFin == anhoInicio)
											this.tituloGrafica = "Ventas Totales por Genero " + anhoFin;
										else
											this.tituloGrafica = "Ventas Totales por Genero " + anhoInicio + "-" + anhoFin;
										
										ventasGenero.setTituloChart(tituloGrafica);
										ventasGenero.ejecutar(ventas, generos,flagTipoReporte, titulosX);
										ocultaPanel();
										
										this.layoutGrafica = (LinearLayout)findViewById(R.id.idpanelgraficoventa);
										this.mChartView = ChartFactory.getBarChartView(this,ventasGenero.getDataset(), 
												ventasGenero.getmRenderer(),Type.DEFAULT);
										layoutGrafica.removeAllViews();
									    layoutGrafica.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,
										               LayoutParams.FILL_PARENT));
										
										Toast.makeText(this, "Se genera el reporte por genero", Toast.LENGTH_SHORT).show();
										Toast.makeText(this, "Para obtener mayor informacion presionar una barra", Toast.LENGTH_LONG).show();
										
										/*** PINTADO DE BOTONES LUEGO DE GENERAR LA GRAFICA ***/
										this.incializaFlags(GENERO_N2);
										this.setColorNivel();
										this.setColorTiempo();
										this.setColorUbicacion();
										
										/*** PARAMETROS PARA EL TERCER NIVEL ***/
										this.mChartView.setOnClickListener(new View.OnClickListener()
										{
											@Override
											public void onClick(View arg0)
											{
												SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();
												if (seriesSelection != null) //Solo nos interesa cuando se selecciona una linea
												{
													int a = seriesSelection.getSeriesIndex();
													genero = generos[a];
													int x = (int) seriesSelection.getXValue();
													periodo = titulosX.get(x-1);
													Venta_Genero.this.crearDialog(); //Creamos el dialgo en caso se use
													tipoNivel.show();//Nos sirve para obtener que tipo de nivel queremo
												}
											}
										});
									}
									else Toast.makeText(this, "No hay datos para mostrar", Toast.LENGTH_LONG).show();
								}else Toast.makeText(this, "Problemas con la conexion", Toast.LENGTH_LONG).show();
							}
							
							if (flagTiempo == 1) //Mensual
							{
								flagTipoReporte = 1; //MES
								String url = urlVentasMensuales;
								if (ubicacion.equals(""))
									url += "Ambos/";
								else
									url += "/";
								url += anhoInicio + "-" + (mesInicio +1) + "-" + diaInicio + "/";
								url += anhoFin + "-" + (mesFin + 1) + "-" + diaFin;
								if (ubicacion.equals(""))
									url +=  ".json";
								else
									url += "/" + ubicacion + ".json";
								auxJson = returnJnConsultas(url);
								
								if (auxJson != null)
								{
									if (auxJson.length() != 0)
									{
										leerJsonM();
										if (anhoFin == anhoInicio && mesInicio == mesFin)
											this.tituloGrafica = "Ventas Totales por Genero del " + (mesInicio + 1) + "-" + anhoInicio;
										else
											this.tituloGrafica = "Ventas Totales por Genero del " + (mesInicio + 1) + "/" + anhoInicio + " - " + (mesFin + 1) + "/" + anhoFin;
									
										ventasGenero.setTituloChart(tituloGrafica);
										ventasGenero.ejecutar(ventas, generos,flagTipoReporte, titulosX);
										ocultaPanel();
										
										this.layoutGrafica = (LinearLayout)findViewById(R.id.idpanelgraficoventa);
										this.mChartView = ChartFactory.getBarChartView(this,ventasGenero.getDataset(), 
												ventasGenero.getmRenderer(),Type.DEFAULT);
										layoutGrafica.removeAllViews();
									    layoutGrafica.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,
										               LayoutParams.FILL_PARENT));
										
										Toast.makeText(this, "Se genera el reporte por genero", Toast.LENGTH_SHORT).show();
										Toast.makeText(this, "Para obtener mayor informacion presionar una barra", Toast.LENGTH_LONG).show();
										
										/*** PINTADO DE BOTONES LUEGO DE GENERAR LA GRAFICA ***/
										this.incializaFlags(GENERO_N2);
										this.setColorNivel();
										this.setColorTiempo();
										this.setColorUbicacion();
										
										/*** PARAMETROS PARA EL TERCER NIVEL ***/
										this.mChartView.setOnClickListener(new View.OnClickListener()
										{
											@Override
											public void onClick(View arg0)
											{
												SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();
												if (seriesSelection != null) //Solo nos interesa cuando se selecciona una linea
												{
													int a = seriesSelection.getSeriesIndex();
													genero = generos[a];
													int x = (int) seriesSelection.getXValue();
													periodo = titulosX.get(x-1);
													Venta_Genero.this.crearDialog(); //Creamos el dialgo en caso se use
													tipoNivel.show();//Nos sirve para obtener que tipo de nivel queremo
												}
											}
										});
									}
									else Toast.makeText(this, "No hay datos para mostrar", Toast.LENGTH_LONG).show();
								}else Toast.makeText(this, "Problemas con la conexion", Toast.LENGTH_LONG).show();
							}
							
							if (flagTiempo == 2) //Trimestral
							{
								flagTipoReporte = 2; //Trimestres
								String url = urlVentasTrimestrales;
								if (ubicacion.equals(""))
									url += "Ambos/";
								else
									url += "/";
								url += anhoInicio + "-" + (mesInicio +1) + "-" + diaInicio + "/";
								url += anhoFin + "-" + (mesFin + 1) + "-" + diaFin;
								if (ubicacion.equals(""))
									url +=  ".json";
								else
									url += "/" + ubicacion + ".json";
								auxJson = returnJnConsultas(url);
								
								if (auxJson != null)
								{
									if (auxJson.length() != 0)
									{
										leerJsonT();
										if (anhoFin == anhoInicio && mesInicio == mesFin)
											this.tituloGrafica = "Ventas Totales por Genero del " + (mesInicio + 1) + "-" + anhoInicio;
										else
											this.tituloGrafica = "Ventas Totales por Genero del " + (mesInicio + 1) + "/" + anhoInicio + " - " + (mesFin + 1) + "/" + anhoFin;
											
										ventasGenero.setTituloChart(tituloGrafica);
										ventasGenero.ejecutar(ventas, generos,flagTipoReporte, titulosX);
										ocultaPanel();
										
										this.layoutGrafica = (LinearLayout)findViewById(R.id.idpanelgraficoventa);
										this.mChartView = ChartFactory.getBarChartView(this,ventasGenero.getDataset(), 
												ventasGenero.getmRenderer(),Type.DEFAULT);
										layoutGrafica.removeAllViews();
									    layoutGrafica.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,
										               LayoutParams.FILL_PARENT));
										
										Toast.makeText(this, "Se genera el reporte por genero", Toast.LENGTH_SHORT).show();
										Toast.makeText(this, "Para obtener mayor informacion presionar una barra", Toast.LENGTH_LONG).show();
										
										/*** PINTADO DE BOTONES LUEGO DE GENERAR LA GRAFICA ***/
										this.incializaFlags(GENERO_N2);
										this.setColorNivel();
										this.setColorTiempo();
										this.setColorUbicacion();
										
										/*** PARAMETROS PARA EL TERCER NIVEL ***/
										this.mChartView.setOnClickListener(new View.OnClickListener()
										{
											@Override
											public void onClick(View arg0)
											{
												SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();
												if (seriesSelection != null) //Solo nos interesa cuando se selecciona una linea
												{
													int a = seriesSelection.getSeriesIndex();
													genero = generos[a];
													int x = (int) seriesSelection.getXValue();
													periodo = titulosX.get(x-1);
													Venta_Genero.this.crearDialog(); //Creamos el dialgo en caso se use
													tipoNivel.show();//Nos sirve para obtener que tipo de nivel queremo
												}
											}
										});
									}
									else Toast.makeText(this, "No hay datos para mostrar", Toast.LENGTH_LONG).show();
								}else Toast.makeText(this, "Problemas con la conexion", Toast.LENGTH_LONG).show();
							}

						}
						if (flagNivel==6)
						{
							this.incializaFlags(DISTRITO);
							Toast.makeText(this, "Se genera el reporte por Distrito", Toast.LENGTH_LONG).show();
						    startActivity(intDistrito);
						}
				}
				else
					Toast.makeText(this, "La Fecha Final no puede ser menor a la Fecha Inicial", Toast.LENGTH_LONG).show();
			}	
			else
				Toast.makeText(this, "Debe seleccionar el periodo y la ubicacion", Toast.LENGTH_LONG).show();
		 }
		
		private void leerJsonA() 
		{		
			regVenta = new ArrayList<Venta>();

			try
			{
				for (int i = 0; i < auxJson.length(); i++)
				{
					Venta auxVenta = new Venta();
					JSONObject jsonItem = auxJson.getJSONObject(i);
			        JSONObject jsonItem1 = jsonItem.getJSONObject("fact_venta");
			        
			        auxVenta.setAnho(jsonItem1.getInt("Anho"));
			        auxVenta.setMonto(jsonItem1.getDouble("Monto"));
			        auxVenta.setIdSexo(jsonItem1.getInt("idsexo"));
			        auxVenta.setNomSexo(jsonItem1.getString("nomsexo"));
			        
			        regVenta.add(auxVenta);
				}
				
				setSexo();
				setTitulosXA();
				setMonto();

			}catch (JSONException e) { e.printStackTrace();}
		}
		
		private void leerJsonM() 
		{		
			regVenta = new ArrayList<Venta>();

			try
			{
				for (int i = 0; i < auxJson.length(); i++)
				{
					Venta auxVenta = new Venta();
					JSONObject jsonItem = auxJson.getJSONObject(i);
			        JSONObject jsonItem1 = jsonItem.getJSONObject("fact_venta");
			        
			        auxVenta.setAnho(jsonItem1.getInt("Anho"));
			        auxVenta.setMonto(jsonItem1.getDouble("Monto"));
			        auxVenta.setMes(jsonItem1.getInt("Mes"));
			        auxVenta.setNomMes(jsonItem1.getString("nomMes"));
			        auxVenta.setIdSexo(jsonItem1.getInt("idsexo"));
			        auxVenta.setNomSexo(jsonItem1.getString("nomsexo"));
			        
			        regVenta.add(auxVenta);
				}
				
				setSexo();
				setTitulosXM();
				setMonto();

			}catch (JSONException e) { e.printStackTrace();}
		}
		
		private void leerJsonT() 
		{		
			regVenta = new ArrayList<Venta>();

			try
			{
				for (int i = 0; i < auxJson.length(); i++)
				{
					Venta auxVenta = new Venta();
					JSONObject jsonItem = auxJson.getJSONObject(i);
			        JSONObject jsonItem1 = jsonItem.getJSONObject("fact_venta");
			        
			        auxVenta.setAnho(jsonItem1.getInt("Anho"));
			        auxVenta.setMonto(jsonItem1.getDouble("Monto"));
			        auxVenta.setTrimestre(jsonItem1.getInt("Trimestre"));
			        auxVenta.setIdSexo(jsonItem1.getInt("idsexo"));
			        auxVenta.setNomSexo(jsonItem1.getString("nomsexo"));
			        
			        regVenta.add(auxVenta);
				}
				
				setSexo();
				setTitulosXT();
				setMonto();

			}catch (JSONException e) { e.printStackTrace();}
		}

		private void setSexo() 
		{
			
			List<String> auxGeneros = new ArrayList<String>();
			Venta auxVenta = regVenta.get(0);
			
			String genero = auxVenta.getNomSexo();
			auxGeneros.add(genero);
			for(int i=1;i<regVenta.size();i++)
			{
				auxVenta = regVenta.get(i);
				String p = auxVenta.getNomSexo();
				
				if(!p.equals(genero))
				{
					genero = p;
					auxGeneros.add(genero);
				}
			}
			
			this.generos = new String[auxGeneros.size()];
			for(int i=0;i<auxGeneros.size();i++)
				this.generos[i] = auxGeneros.get(i);
			/*
			this.generos = new String[2];
			this.generos[0]="Hombre";
			this.generos[1]="Mujer";
			*/
			
		}
		

		private void setTitulosXA()
		{
			this.titulosX = new ArrayList<String>();
			
			Venta auxVenta = regVenta.get(0);
			String genero = auxVenta.getNomSexo();
			titulosX.add(auxVenta.getAnho()+"");
			
			for(int i=1;i<regVenta.size();i++)
			{
				auxVenta = regVenta.get(i);
				String p = auxVenta.getNomSexo();
				
				if(p.equals(genero))
					titulosX.add(auxVenta.getAnho()+"");
				else
					break;
			}
		}
		
		private void setTitulosXM()
		{
			this.titulosX = new ArrayList<String>();
			
			Venta auxVenta = regVenta.get(0);
			String genero = auxVenta.getNomSexo();
			titulosX.add(auxVenta.getNomMes());
			
			for(int i=1;i<regVenta.size();i++)
			{
				auxVenta = regVenta.get(i);
				String p = auxVenta.getNomSexo();
				
				if(p.equals(genero))
					titulosX.add(auxVenta.getNomMes());
				else
					break;
			}
		}
		
		private void setTitulosXT()
		{
			this.titulosX = new ArrayList<String>();
			
			Venta auxVenta = regVenta.get(0);
			String genero = auxVenta.getNomSexo();
			titulosX.add(auxVenta.getTrimestre() + "/" + auxVenta.getAnho());
			
			for(int i=1;i<regVenta.size();i++)
			{
				auxVenta = regVenta.get(i);
				String p = auxVenta.getNomSexo();
				
				if(p.equals(genero))
					titulosX.add(auxVenta.getTrimestre() + "/" + auxVenta.getAnho());
				else
					break;
			}
		}
		
		private void setMonto() 
		{
			double[] auxMonto = null;
			ventas = new ArrayList<double[]>();
			
			for(int i=0;i<generos.length;i++)
			{
				auxMonto = dameVentasP(generos[i]);
				ventas.add(auxMonto);
			}
		}

		private double[] dameVentasP(String genero)
		{
			double[] auxMonto = null;
			if (titulosX.size() == 1)
			{
				auxMonto = new double[this.titulosX.size()+1];
				Venta auxVenta = null;
				int cont = 0;
				
				for(int i=0;i<regVenta.size();i++)
				{
					auxVenta = regVenta.get(i);
					String p = auxVenta.getNomSexo();
					
					if(p.equals(genero))
					{
						auxMonto[cont] = auxVenta.getMonto();
						cont++;
						if (cont == titulosX.size())
						{
							auxMonto[cont] = 0;
							break;
						}
							
					}
						
				}
			}
			else
			{
				auxMonto = new double[this.titulosX.size()];
				Venta auxVenta = null;
				int cont = 0;
				
				for(int i=0;i<regVenta.size();i++)
				{
					auxVenta = regVenta.get(i);
					String p = auxVenta.getNomSexo();
					
					if(p.equals(genero))
					{
						auxMonto[cont] = auxVenta.getMonto();
						cont++;
						if (cont == titulosX.size())
							break;
					}
						
				}
			}
			
			return auxMonto;
		}

		private void ocultaPanel()
		{
			LinearLayout ll7 = (LinearLayout)findViewById(R.id.lytOpciones);
			ll7.setVisibility(View.GONE);
		}
		
		private void muestraPanel()
		{
			LinearLayout ll7 = (LinearLayout)findViewById(R.id.lytOpciones);
			if (ll7.getVisibility()== View.VISIBLE)
				ll7.setVisibility(View.GONE);
			else
				ll7.setVisibility(View.VISIBLE);
		}

		/***METODOS DEL JSON****/
		
		private JSONArray returnJnConsultas(String url) {
			JSONArray array = null;
			try {
				array = (new JSONParser_Final().execute(url)).get(); //SE OBTIENE LOS OBJ DEL JSON
			} catch (Exception e) {
				Toast.makeText(this, "Problemas con la conexion", Toast.LENGTH_LONG).show();
			}
			return array;
		}
		
		/*** COLOR TIEMPO ***/
		public void establecerColorTiempo(View view)
		{
			Button buttonMensuales = (Button) findViewById(R.id.buttonMensuales);
			Button buttonAnuales = (Button) findViewById(R.id.buttonAnuales);
			Button buttonTrimestrales = (Button) findViewById(R.id.buttonTrimestrales);
			
			if (buttonMensuales.isPressed()) flagTiempo=1;
			else if (buttonAnuales.isPressed()) flagTiempo=3;
			else if (buttonTrimestrales.isPressed()) flagTiempo=2;
			setColorTiempo();
		}

		public void setColorTiempo(){
			
			Button buttonMensuales = (Button) findViewById(R.id.buttonMensuales);
			Button buttonAnuales = (Button) findViewById(R.id.buttonAnuales);
			Button buttonTrimestrales = (Button) findViewById(R.id.buttonTrimestrales);
		
			if (flagTiempo==1){
				
				Drawable d1 = buttonMensuales.getBackground();
	            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
	            d1.setColorFilter(filter);
				
				
				Drawable d2 = buttonAnuales.getBackground();
	            findViewById(R.id.buttonAnuales).invalidateDrawable(d2);
	            d2.clearColorFilter();
				
	            Drawable d3 = buttonTrimestrales.getBackground();
	            findViewById(R.id.buttonTrimestrales).invalidateDrawable(d3);
	            d3.clearColorFilter();
				
			}
			if (flagTiempo==3){
				Drawable d1 = buttonAnuales.getBackground();
	            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
	            d1.setColorFilter(filter);

				
				Drawable d2 = buttonMensuales.getBackground();
	            findViewById(R.id.buttonMensuales).invalidateDrawable(d2);
	            d2.clearColorFilter();
				
	            Drawable d3 = buttonTrimestrales.getBackground();
	            findViewById(R.id.buttonTrimestrales).invalidateDrawable(d3);
	            d3.clearColorFilter();

			
			}
			if (flagTiempo==2) {
				Drawable d1 = buttonTrimestrales.getBackground();
	            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
	            d1.setColorFilter(filter);

				
				Drawable d2 = buttonMensuales.getBackground();
	            findViewById(R.id.buttonMensuales).invalidateDrawable(d2);
	            d2.clearColorFilter();
				
	            Drawable d3 = buttonAnuales.getBackground();
	            findViewById(R.id.buttonAnuales).invalidateDrawable(d3);
	            d3.clearColorFilter();
				
			}
		}
		
		/*** COLOR UBICACION ***/
		public void establecerColorUbicacion(View view){


			Button buttonLima = (Button) findViewById(R.id.buttonLima);
			Button buttonProvincia = (Button) findViewById(R.id.buttonProvincia);

	        
	        if (buttonLima.isPressed()){
	        	if (flagLima == 0)  flagLima=1; else flagLima=0;
			}
			if (buttonProvincia.isPressed()){
				
				if(flagProvincia==0) flagProvincia=1; else flagProvincia=0;
			}
			
			setColorUbicacion();
	        
		}

		public void setColorUbicacion(){
			

			Button buttonLima = (Button) findViewById(R.id.buttonLima);
			Button buttonProvincia = (Button) findViewById(R.id.buttonProvincia);
			
			
	        if (flagLima == 1) {
	        		
	        	Drawable d1 = buttonLima.getBackground();
	            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
	            d1.setColorFilter(filter);

	    	}
	    	else{

	    		Drawable d2 = buttonLima.getBackground();
	            findViewById(R.id.buttonLima).invalidateDrawable(d2);
	            d2.clearColorFilter();
	    	}

			if(flagProvincia==1){

				
				Drawable d1 = buttonProvincia.getBackground();
	            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
	            d1.setColorFilter(filter);

				
			}
			else{

	            
				Drawable d2 = buttonProvincia.getBackground();
	            findViewById(R.id.buttonProvincia).invalidateDrawable(d2);
	            d2.clearColorFilter();
	            
			}
		}
		
		/*** COLOR DE LOS NIVELES **/
		public void setColorNivel()
		{
			Button buttonCanal = (Button) findViewById(R.id.buttonCanal);
			Button buttonGenero = (Button) findViewById(R.id.buttonGenero);
			Button buttonPromotor = (Button) findViewById(R.id.buttonPromotor);
			Button buttonEdad = (Button) findViewById(R.id.buttonEdad);
			Button buttonTipoEvento = (Button) findViewById(R.id.buttonTipoEvento);
			Button buttonDistrito = (Button) findViewById(R.id.buttonDistrito);
		
			if (flagNivel == 1)
			{
				Drawable d1 = buttonPromotor.getBackground();
	            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
	            d1.setColorFilter(filter);
	    	}else
			{
				Drawable d1 = buttonPromotor.getBackground();
	            findViewById(R.id.buttonPromotor).invalidateDrawable(d1);
	            d1.clearColorFilter();
			}
			
			if (flagNivel == 2)
			{
				Drawable d1 = buttonTipoEvento.getBackground();
	            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
	            d1.setColorFilter(filter);
	        }else
	        {
	        	Drawable d1 = buttonTipoEvento.getBackground();
	            findViewById(R.id.buttonTipoEvento).invalidateDrawable(d1);
	            d1.clearColorFilter();
			}
			
			if (flagNivel == 3)
			{
				Drawable d1 = buttonEdad.getBackground();
	            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
	            d1.setColorFilter(filter);
	    	}else
	    	{
	    		Drawable d1 = buttonEdad.getBackground();
	            findViewById(R.id.buttonEdad).invalidateDrawable(d1);
	            d1.clearColorFilter();
	        }
			
			if (flagNivel == 4)
			{
				Drawable d1 = buttonCanal.getBackground();
	            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
	            d1.setColorFilter(filter);
	        }else
	        {
	        	Drawable d1 = buttonCanal.getBackground();
	            findViewById(R.id.buttonCanal).invalidateDrawable(d1);
	            d1.clearColorFilter();
	        }

			if (flagNivel == 5)
			{
				Drawable d1 = buttonGenero.getBackground();
	            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
	            d1.setColorFilter(filter);
	        }else
	        {
	        	Drawable d1 = buttonGenero.getBackground();
	            findViewById(R.id.buttonGenero).invalidateDrawable(d1);
	            d1.clearColorFilter();
	        }

			if (flagNivel == 6)
			{
				Drawable d1 = buttonDistrito.getBackground();
	            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
	            d1.setColorFilter(filter);
	        }else
	        {
	        	Drawable d1 = buttonDistrito.getBackground();
	            findViewById(R.id.buttonDistrito).invalidateDrawable(d1);
	            d1.clearColorFilter();
	        }
		}
		
		public void establecerSegundoNivel(View view)
		{
			Button buttonCanal = (Button) findViewById(R.id.buttonCanal);
			Button buttonGenero = (Button) findViewById(R.id.buttonGenero);
			Button buttonPromotor = (Button) findViewById(R.id.buttonPromotor);
			Button buttonEdad = (Button) findViewById(R.id.buttonEdad);
			Button buttonTipoEvento = (Button) findViewById(R.id.buttonTipoEvento);
			Button buttonDistrito = (Button) findViewById(R.id.buttonDistrito);
			
			Button buttonProvincia = (Button) findViewById(R.id.buttonProvincia);
			buttonProvincia.setEnabled(true);
			//flagProvincia=0;
			
			if (buttonCanal.isPressed())if (flagNivel == 4) flagNivel=0; else flagNivel=4;
			else if (buttonGenero.isPressed()) if (flagNivel == 5) flagNivel=0; else flagNivel=5;
			else if (buttonPromotor.isPressed()) if (flagNivel == 1) flagNivel=0; else flagNivel=1;
			else if (buttonTipoEvento.isPressed()) if (flagNivel == 2) flagNivel=0; else flagNivel=2;
			else if (buttonEdad.isPressed()) if (flagNivel == 3) flagNivel=0; else flagNivel=3;
			else if (buttonDistrito.isPressed()) {
				if (flagNivel == 6) flagNivel=0; 
				else {
					buttonProvincia.setEnabled(false);
					flagProvincia=0;
					flagNivel=6;
				}
			}
			
			setColorNivel();
			setColorUbicacion();
		}
		
		private void incializaFecha()
		{
			pickDateInicio = (Button) findViewById(R.id.ButtonInicio);
			pickDateInicio.setOnClickListener(new View.OnClickListener() {
			            public void onClick(View v) {
			                showDialog(DATE_DIALOG_Inicial);
			            }
			        });
			
			fechaInicio = (TextView) findViewById(R.id.fechaInicio);
			fechaInicio.setText("Fecha Inicio: " + diaInicio + "/"+ (mesInicio +1) + "/"+ anhoInicio);
            
			pickDateFin = (Button) findViewById(R.id.ButtonFin);
	        
			pickDateFin.setOnClickListener(new View.OnClickListener() {
			            public void onClick(View v) {
			                showDialog(DATE_DIALOG_Final);
			            }
			        });
			
			fechaFin = (TextView) findViewById(R.id.fechaFin);
			fechaFin.setText("Fecha Fin: " + diaFin + "/"+ (mesFin +1) + "/"+ anhoFin);
		}
		
		/*** FECHAS ***/
		protected Dialog onCreateDialog(int id) {
			   switch (id) {
			   case DATE_DIALOG_Inicial:
			    DatePickerDialog dialogoInicio =new DatePickerDialog(this,
			                    mDateSetListenerInicio, anhoInicio, mesInicio, diaInicio);
			    
			    dialogoInicio.getDatePicker();
				   
			    return dialogoInicio;
			    
			   case DATE_DIALOG_Final:
				    DatePickerDialog dialogoFin =new DatePickerDialog(this,
				                    mDateSetListenerFin, anhoFin, mesFin, diaFin);
				    
				    dialogoFin.getDatePicker();
			   
			    return dialogoFin;
			   }
			   return null;
		}
		
		/*** FECHA INICIO ***/
		private DatePickerDialog.OnDateSetListener mDateSetListenerInicio = new DatePickerDialog.OnDateSetListener()
			{
				public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
				{
					anhoInicio = year;
					mesInicio = monthOfYear;
					diaInicio = dayOfMonth;
					fechaInicio = (TextView) findViewById(R.id.fechaInicio);
					fechaInicio.setText("Fecha Inicio: " + diaInicio + "/"+ (mesInicio + 1) + "/"+ anhoInicio);
				}
			};
		
		/*** FECHA FIN ***/
		private DatePickerDialog.OnDateSetListener mDateSetListenerFin = new DatePickerDialog.OnDateSetListener()
		{
			public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
			{
				anhoFin = year;
				mesFin = monthOfYear;
				diaFin = dayOfMonth;
				fechaFin = (TextView) findViewById(R.id.fechaFin);
				fechaFin.setText("Fecha Fin: " + diaFin + "/"+ (mesFin + 1) + "/"+ anhoFin);
			}
		};
		
		
		
		/*** DIALOGO ***/
		private void crearDialog()
		{
			tipoNivel = new AlertDialog.Builder(this);
			tipoNivel.setTitle("Ventas por Generos");
			tipoNivel.setMessage("Seleccione el tipo de informacion que se desea mostrar en la siguiente gráfica");//tipoNivel.setCancelable(true);
			
			
			tipoNivel.setPositiveButton("Por Tipo de Evento", new DialogInterface.OnClickListener()
			{ 
				public void onClick(DialogInterface dialog, int id) 
				{ 
					Venta_Genero.this.incializaFlags(GENERO_N3);
					intGeneroN3.putExtra("tipoNivel3", 1);
					intGeneroN3.putExtra("genero",genero);
					intGeneroN3.putExtra("periodo",periodo);
					
					intGeneroN3.putExtra("nombreUser", nombreUser);
					intGeneroN3.putExtra("idperfil", idperfil);
					intGeneroN3.putExtra("idUsuario", idUsuario);
					startActivity(intGeneroN3);
				}
			});
			
			tipoNivel.setNeutralButton("Por Canal", new DialogInterface.OnClickListener()
			{ 
				public void onClick(DialogInterface dialog, int id) 
				{
					Venta_Genero.this.incializaFlags(GENERO_N3);
					intGeneroN3.putExtra("tipoNivel3", 2);
					intGeneroN3.putExtra("genero",genero);
					intGeneroN3.putExtra("periodo",periodo);
					
					intGeneroN3.putExtra("nombreUser", nombreUser);
					intGeneroN3.putExtra("idperfil", idperfil);
					intGeneroN3.putExtra("idUsuario", idUsuario);
					startActivity(intGeneroN3);
				}
			});
			
			tipoNivel.setNegativeButton("Por Rango de Edades", new DialogInterface.OnClickListener()
			{ 
				public void onClick(DialogInterface dialog, int id) 
				{ 
					Venta_Genero.this.incializaFlags(GENERO_N3);
					intGeneroN3.putExtra("tipoNivel3", 3);
					intGeneroN3.putExtra("genero",genero);
					intGeneroN3.putExtra("periodo",periodo);
					
					intGeneroN3.putExtra("nombreUser", nombreUser);
					intGeneroN3.putExtra("idperfil", idperfil);
					intGeneroN3.putExtra("idUsuario", idUsuario);
					startActivity(intGeneroN3);
				}
			});

			tipoNivel.create();
		}
		
		/*** INICIALIZA FLAG DEL INTENT ***/
		private void inicializaFlagPromotor ()
		{
			flagGenerarReporte = this.getIntent().getExtras().getInt("flagGenerarReporte");
			flagLima= this.getIntent().getExtras().getInt("flagLima");
			flagProvincia= this.getIntent().getExtras().getInt("flagProvincia");
			flagNivel= this.getIntent().getExtras().getInt("flagNivel");
			flagTiempo= this.getIntent().getExtras().getInt("flagTiempo");
			
			anhoInicio= this.getIntent().getExtras().getInt("anhoInicio");
			mesInicio= this.getIntent().getExtras().getInt("mesInicio");
			diaInicio= this.getIntent().getExtras().getInt("diaInicio");
			
			diaFin= this.getIntent().getExtras().getInt("diaFin");
			mesFin= this.getIntent().getExtras().getInt("mesFin");
			anhoFin= this.getIntent().getExtras().getInt("anhoFin");
		}
		
		/*** FLAGS ***/
		private void incializaFlags(int intent)
		{
			Intent intVenta = null;
			switch(intent)
			{
				case GENERO_N3:
					intGeneroN3 = new Intent(Venta_Genero.this,Venta_Genero_Nivel3.class); //Se usa para inicializar para toda la clase
					intVenta = intGeneroN3;
					break;
				
				case GENERO_N2:
					Intent intPromotor = this.getIntent(); //Solo para actualizar esta misma clase
					intVenta = intPromotor;
					break;
					
				case VENTAS_GENERALES:
					intVentasGenerales = new Intent(Venta_Genero.this,VentasGenerales.class);
					intVenta = intVentasGenerales;
					break;
					
				case TIPO_EVENTO:
					intTipoEvento = new Intent(Venta_Genero.this,Venta_TipoEvento.class);
					intVenta = intTipoEvento;
					break;
					
				case EDAD:
					intEdad = new Intent(Venta_Genero.this, Venta_Edad.class);
					intVenta = intEdad;
					break;
					
				case CANAL:
					intCanal = new Intent(Venta_Genero.this, Venta_Canal.class);
					intVenta = intCanal;
					break;
				
				case PROMOTOR:
					this.intPromotor = new Intent(Venta_Genero.this, Venta_Promotor.class);
					intVenta = this.intPromotor;
					break;
					
				case DISTRITO:
					intDistrito = new Intent(Venta_Genero.this, Venta_Distrito.class);
					intVenta = intDistrito;
					break;
			}
			
			intVenta.putExtra("flagLima", flagLima);
			intVenta.putExtra("flagProvincia", flagProvincia);
			intVenta.putExtra("flagNivel", flagNivel);
			intVenta.putExtra("flagTiempo", flagTiempo);
			intVenta.putExtra("anhoInicio", anhoInicio);
			intVenta.putExtra("mesInicio", mesInicio);
			intVenta.putExtra("diaInicio", diaInicio);
			intVenta.putExtra("anhoFin", anhoFin);
			intVenta.putExtra("mesFin", mesFin);
			intVenta.putExtra("diaFin", diaFin);
			intVenta.putExtra("flagGenerarReporte", 1);
			
			intVenta.putExtra("nombreUser", nombreUser);
			intVenta.putExtra("idperfil", idperfil);
			intVenta.putExtra("idUsuario", idUsuario);
		}
		
		/*** ACTION BAR ***/	
		
		@Override
		public boolean onCreateOptionsMenu(Menu menu)
		{
			MenuInflater inflater = getMenuInflater();
			inflater.inflate(R.menu.menuprincipal, menu);
			return true;
		}
		
		@Override
		public boolean onOptionsItemSelected(MenuItem item) {
		    // Handle item selection
		    switch (item.getItemId()) {
		        case R.id.logout:
		        	Intent logo = new Intent(this,login.class);
		        	startActivity(logo);
		            return true;
		        case android.R.id.home:
		        	muestraPanel();
		            return true;
		        case R.id.menuPrincipal:
		        	Intent menu = new Intent(this,com.Generales.Menu.class);
		        		        	
		        	menu.putExtra("codigo","");
		        	menu.putExtra("nombreUser",nombreUser);
		        	menu.putExtra("idPromotor",idUsuario);
		        	menu.putExtra("idperfil", idperfil);
		        	startActivity(menu);
		            return true; 
		        default:
		            return super.onOptionsItemSelected(item);
		    }
		}
		

	}